Generally, digital logic circuits may be divided into two broad categories: synchronous logic circuits and asynchronous logic circuits. Synchronous logic circuits modify and store values synchronously with some type of clock signal. Asynchronous logic circuits modify values continuously based on inputs independent of a clock signal. Synchronous logic circuits are usually used any time logic values need to be remembered by storing the logic state. When storing a logic state in synchronous logic circuits, a register or flip-flop is used to capture the logic values at an input periodically based on a clock signal and maintain the logic value on an output. Asynchronous logic circuits are also capable of storing logic values in a component called a latch. Latches are controlled to maintain a value supplied until a different value is supplied or “latched.”
In terms of synchronous logic circuits, the clock signal may have significant impact on system performance and operation. For example, modern computer processors and memories are highly complex synchronous digital logic circuits. Logic values are written to and read from memories periodically based on a clock signal. Additionally, digital logic calculations are performed and supplied at outputs of a processing unit periodically based on a clock signal or a multiple of the clock signal (i.e., multiple cycles). Registers and other memory elements are used to maintain and distribute logic values throughout the system and the clock signal or signals are used to synchronize setting and resetting of logic values so that systems can predictably perform numerous calculations per second.
In many systems, such as computing systems with memories, multiple types of clock signals may be used for different components. For example, a unifying system clock or signal may be used to synchronize the period of each component in the system, but the components may operate based on different types of signals than that provided by the system clock. In such situations, a clock pulse generator may be used to generate a new clock pulse based on an input system signal, for example.